home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / MS / APPLET / AppletZipClassLoader.class (.txt) < prev   
Encoding:
Java Class File  |  1997-04-14  |  3.7 KB  |  144 lines

  1. package ms.applet;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.PrintStream;
  6. import java.net.URL;
  7. import java.net.URLConnection;
  8. import java.util.Hashtable;
  9. import sun.tools.zip.ZipEntry;
  10. import sun.tools.zip.ZipFormatException;
  11. import sun.tools.zip.ZipReader;
  12.  
  13. class AppletZipClassLoader extends AppletClassLoader {
  14.    Hashtable classBytes = new Hashtable();
  15.  
  16.    AppletZipClassLoader(AppletViewer var1, URL var2) throws IOException {
  17.       super(var1, var2);
  18.       System.out.println("loading zip file from " + var2);
  19.       Thread var3 = Thread.currentThread();
  20.  
  21.       try {
  22.          URLConnection var4 = var2.handler.openConnection(var2);
  23.          var4.setAllowUserInteraction(false);
  24.          ZipReader var5 = new ZipReader(var4.getInputStream());
  25.  
  26.          while(var5.nextEntry() && !var3.isInterrupted()) {
  27.             ZipEntry var6 = var5.getEntry();
  28.             String var7 = var6.getPath();
  29.             if (var7.startsWith(".class", var7.count - ".class".count)) {
  30.                InputStream var8 = var5.getInputStream();
  31.                int var9 = (int)var6.length();
  32.                byte[] var10 = new byte[var9];
  33.                System.out.println("    " + var7 + " (" + var9 + " bytes)");
  34.  
  35.                int var12;
  36.                for(int var11 = 0; var11 < var9 && !var3.isInterrupted(); var11 += var12) {
  37.                   var12 = var8.read(var10, var11, var9 - var11);
  38.                   if (var12 == -1) {
  39.                      throw new ZipFormatException("bad entry: " + var7);
  40.                   }
  41.                }
  42.  
  43.                if (var3.isInterrupted()) {
  44.                   break;
  45.                }
  46.  
  47.                String var14 = var7.substring(0, var7.count - 6).replace('/', '.');
  48.                this.classBytes.put(var14, var10);
  49.             }
  50.          }
  51.       } catch (Throwable var13) {
  52.          var13.printStackTrace();
  53.          throw new IOException("could not load zip file: " + var2);
  54.       }
  55.  
  56.       if (var3.isInterrupted()) {
  57.          this.classBytes = new Hashtable();
  58.          throw new IOException("zip loading interrupted: " + var2);
  59.       }
  60.    }
  61.  
  62.    public Class loadClass(String var1) throws ClassNotFoundException {
  63.       return this.loadClass(var1, true);
  64.    }
  65.  
  66.    protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  67.       Class var3 = (Class)super.classes.get(var1);
  68.       if (var3 == null) {
  69.          SecurityManager var4 = System.security;
  70.          if (var4 != null) {
  71.             int var5 = var1.lastIndexOf(46, var1.count - 1);
  72.             if (var5 >= 0) {
  73.                var4.checkPackageAccess(var1.substring(0, var5));
  74.             }
  75.          }
  76.  
  77.          try {
  78.             if (!super.initialized) {
  79.                throw new SecurityException("Security Exception: ClassLoader object not initialized.");
  80.             }
  81.  
  82.             return super.findSystemClass0(var1);
  83.          } catch (Throwable var6) {
  84.             var3 = this.findClass(var1);
  85.          }
  86.       }
  87.  
  88.       if (var3 == null) {
  89.          throw new ClassNotFoundException(var1);
  90.       } else {
  91.          if (var2) {
  92.             if (!super.initialized) {
  93.                throw new SecurityException("Security Exception: ClassLoader object not initialized.");
  94.             }
  95.  
  96.             super.resolveClass0(var3);
  97.          }
  98.  
  99.          return var3;
  100.       }
  101.    }
  102.  
  103.    private synchronized Class findClass(String var1) {
  104.       Class var2 = (Class)super.classes.get(var1);
  105.       if (var2 == null) {
  106.          SecurityManager var3 = System.security;
  107.          PrintStream var10000 = System.out;
  108.          StringBuffer var10001 = new StringBuffer();
  109.          Thread var4 = Thread.currentThread();
  110.          char[] var5 = var4.name;
  111.          var10000.println(var10001.append(new String(var5)).append(" find class ").append(var1).toString());
  112.          if (var3 != null) {
  113.             int var7 = var1.lastIndexOf(46, var1.count - 1);
  114.             if (var7 >= 0) {
  115.                var3.checkPackageDefinition(var1.substring(0, var7));
  116.             }
  117.          }
  118.  
  119.          byte[] var8 = (byte[])this.classBytes.get(var1);
  120.          if (var8 != null) {
  121.             try {
  122.                int var9 = var8.length;
  123.                if (!super.initialized) {
  124.                   throw new SecurityException("Security Exception: ClassLoader object not initialized.");
  125.                }
  126.  
  127.                var2 = super.defineClass0(var8, 0, var9);
  128.                if (!var1.equals(var2.getName())) {
  129.                   throw new ClassFormatError();
  130.                }
  131.             } catch (ClassFormatError var6) {
  132.                System.err.println("Class format error: " + var1);
  133.                return null;
  134.             }
  135.  
  136.             super.classes.put(var1, var2);
  137.             this.classBytes.remove(var1);
  138.          }
  139.       }
  140.  
  141.       return var2;
  142.    }
  143. }
  144.